/*
 *  Copyright 2017 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

package org.webrtc;

import java.util.Map;

/**
 * Java version of webrtc::RTCStatsReport. Each RTCStatsReport produced by
 * getStats contains multiple RTCStats objects; one for each underlying object
 * (codec, stream, transport, etc.) that was inspected to produce the stats.
 */
public class RTCStatsReport {
    private final long timestampUs;
    private final Map<String, RTCStats> stats;

    public RTCStatsReport(long timestampUs, Map<String, RTCStats> stats) {
        this.timestampUs = timestampUs;
        this.stats = stats;
    }

    // Timestamp in microseconds.
    public double getTimestampUs() {
        return timestampUs;
    }

    // Map of stats object IDs to stats objects. Can be used to easily look up
    // other stats objects, when they refer to each other by ID.
    public Map<String, RTCStats> getStatsMap() {
        return stats;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("{ timestampUs: ").append(timestampUs).append(", stats: [\n");
        boolean first = true;
        for (RTCStats stat : stats.values()) {
            if (!first) {
                builder.append(",\n");
            }
            builder.append(stat);
            first = false;
        }
        builder.append(" ] }");
        return builder.toString();
    }

    // TODO(bugs.webrtc.org/8557) Use ctor directly with full Map type.
    @SuppressWarnings("unchecked")
    @CalledByNative
    private static RTCStatsReport create(long timestampUs, Map stats) {
        return new RTCStatsReport(timestampUs, stats);
    }
}
